<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 函数柯里化示例
        // 封装一个正则验证
        function createCurry(rep) {
          return function(str) {
            return rep.test(str)
          }
        }

        // 柯里化验证手机号
        // var mobileVerify = createCurry(/^1[3456789]\d{9}$/)
        // // 正则比较会隐式进行类型转换 调用toString()
        // let a = {
        //   i: null,
        //   toString() {
        //       console.log('我被调用了');
        //     return '18630513784'
        //   }
        // }
        // console.log(mobileVerify(a));

        // 柯里化封装邮箱验证

        // var emailVerify = createCurry(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/)
        // let myEmail = emailVerify('berlin_3@126.com')
        // console.log(myEmail);

        // 实现 add(1)(2)(3)     
        // function request(...args) {
        //   if (!args.length) return
        //   return args.reduce((a, b) => a + b)
        // }

        function currying(callback) {
          let args = []
          return function temp(...newArgs) {
            if(newArgs.length) {
              // temp 有参数继续返回 temp
              args.push(...newArgs)
              return temp
            } else {
              // 没有参数 调用
              let val = callback(...args)
              args = []
              return val
            }
          }
        }

        // const add = currying(request)
        // console.log(add(1)(2)(3)(4)());
    </script>
</body>
</html>